package com.smile.handler;

import cn.hutool.http.HttpStatus;
import com.smile.exception.BusinessException;
import com.smile.util.ApiResult;
import com.smile.util.ApiResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {


    /**
     * 统一处理异常
     *
     * @param e 异常
     * @return API请求响应实体
     */
    @ExceptionHandler(value = Throwable.class)
    public ApiResult handleException(Throwable e){
        //如果是后续的业务代码中抛出的业务异常，则使用业务异常的返回码和返回信息。
        if(e instanceof BusinessException){
            BusinessException exception  = (BusinessException) e;
            log.info("请求出现业务异常：", exception);
            return ApiResultUtil.error(exception.getCode(), exception.getMessage());
        }
        log.error("请求出现异常：", e);
        return ApiResultUtil.error(HttpStatus.HTTP_INTERNAL_ERROR, "服务器内部错误");
    }

}
